/**
 * Copyright 2019-2020 Huawei Technologies Co., Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef FUSION_ENGINE_OPTIMIZER_GRAPH_OPTIMIZER_FUSION_COMMON_FUSION_PASS_NAME_H_
#define FUSION_ENGINE_OPTIMIZER_GRAPH_OPTIMIZER_FUSION_COMMON_FUSION_PASS_NAME_H_
#include <map>
#include <string>
#include <vector>

namespace fe {
// graph fusion pass name
static const std::string BATCHNORM_FUSION_PASS = "BatchnormFusionPass";
static const std::string CONV_BATCHNORM_FUSION_PASS = "ConvBatchnormFusionPass";
static const std::string CONV_SCALE_FUSION_PASS = "ConvScaleFusionPass";
static const std::string RELU_FUSION_PASS = "ReluFusionPass";
static const std::string EXTREMUM_GRAD_FUSION_PASS = "ExtremumGradFusionPass";
static const std::string LOGSOFTMAX_GRAD_FUSION_PASS = "LogSoftmaxGradFusionPass";
static const std::string MATMUL_CAST_FUSION_PASS = "MatmulCastFusionPass";
static const std::string MATMUL_BIASADD_FUSION_PASS = "MatMulBiasAddFusionPass";
static const std::string DRELU_FUSION_PASS = "DreluFusionPass";
static const std::string BATCHNORM_BNINFER_FUSION_PASS = "BatchNormBnInferFusionPass";
static const std::string PSROIPOOLING_FUSION_PASS = "PSROIPoolingFusionPass";
static const std::string HostBN_Fusion_Pass = "HostBNFusionPass";
static const std::string CONV_WEIGHT_COMPRESS_FUSION_PASS = "ConvWeightCompressFusionPass";
static const std::string SPLIT_CONV_CONCAT_FUSION_PASS = "SplitConvConcatFusionPass";
static const std::string CONV_CONCAT_FUSION_PASS = "ConvConcatFusionPass";
static const std::string CONCAT_QUANT_FUSION_PASS = "ConcatQuantFusionPass";

static const std::string STRIDE_HOISTING_PASS = "StrideHoistingPass";

// quant graph fusion pass name
static const std::string AVGPOOL_QUANT_ROLLBACK_BIAS_PASS = "AvgPoolQuantProcessFusionPass";
static const std::string CONV2D_QUANT_ROLLBACK_BIAS_PASS = "Conv2DQuantProcessFusionPass";
static const std::string GROUP_CONV2D_QUANT_ROLLBACK_BIAS_PASS = "GroupConv2DQuantProcessFusionPass";
static const std::string CONV2DTD_QUANT_ROLLBACK_BIAS_PASS = "Conv2DTDQuantProcessFusionPass";
static const std::string DECONV_QUANT_ROLLBACK_BIAS_PASS = "DeConvQuantProcessFusionPass";
static const std::string DWCONV2D_QUANT_ROLLBACK_BIAS_PASS = "DWConv2DQuantProcessFusionPass";
static const std::string FC_QUANT_ROLLBACK_BIAS_PASS = "FCQuantProcessFusionPass";
static const std::string MATMULV2_QUANT_ROLLBACK_BIAS_PASS = "MatmulV2QuantProcessFusionPass";
static const std::string POOLING_QUANT_ROLLBACK_BIAS_PASS = "PoolingQuantProcessFusionPass";
static const std::string MAXPOOL_QUANT_ROLLBACK_BIAS_PASS = "MaxPoolQuantProcessFusionPass";
static const std::string BATCH_MATMULV2_QUANT_ROLLBACK_BIAS_PASS = "BatchMatmulV2QuantProcessFusionPass";

static const std::string V100_REQUANT_FUSION_PASS = "V100RequantFusionPass";
static const std::string V100_NOT_REQUANT_FUSION_PASS = "V100NotRequantFusionPass";
static const std::string V200_REQUANT_FUSION_PASS = "V200RequantFusionPass";
static const std::string V200_NOT_REQUANT_FUSION_PASS = "V200NotRequantFusionPass";
static const std::string TF_TAG_NO_CONST_FOLDING_FUSION_PASS = "TfTagNoConstFoldingFusionPass";
static const std::string TF_MERGE_CONV2DBACKPROPINPUT_FUSION_PASS = "TfMergeConv2DBackpropInputFusionPass";
static const std::string TF_MERGE_SUB_FUSION_PASS = "TfMergeSubFusionPass";

// ub fusion pass
static const std::string CONV2D_BACKPROP_ELEMWISE_UB_PASS = "TbeConv2DBackpropElemwiseFusionPass";
static const std::string CONV_BNREDUCE_UB_PASS = "TbeConvBnreduceFusionPass";
static const std::string CONV_DEQUANT_QUANT_UB_PASS = "TbeConvDequantQuantFusionPass";
static const std::string CONV_DEQUANT_UB_PASS = "TbeConvDequantFusionPass";
static const std::string CONV_REQUANT_UB_PASS = "TbeConvRequantFusionPass";
static const std::string BNUPDATE_ELTWISE_UB_PASS = "TbeBnupdateEltwiseFusionPass";
static const std::string BNUPDATE_ELTWISE_ELTWISE_UB_PASS = "TbeBnupdateEltwiseEltwiseFusionPass";
static const std::string MULTIOUTPUT_UB_PASS = "TbeMultiOutputFusionPass";
static const std::string REDUCE_ELEMWISE_UB_PASS = "TbeReduceElemwiseFusionPass";
static const std::string ELTWISE_UB_PASS = "TbeEltwiseFusionPass";
static const std::string DYNAMIC_ELEMWISE_BROADCAST_UB_PASS = "TbeDynamicElemwiseBroadcastFusionPass";
static const std::string DYNAMIC_ELEMWISE_REDUCE_UB_PASS = "TbeDynamicElemwiseReduceFusionPass";
static const std::string DEPTHWISECONV_ELEMWISE_UB_PASS = "TbeDepthwiseConvElemwiseFusionPass";
static const std::string DEPTHWISECONV_DEQUANT_UB_PASS = "TbeDepthwiseConvDequantFusionPass";
static const std::string READSELECT_ELTWISE_UB_PASS = "TbeReadSelectEltwiseFusionPass";
static const std::string ELTWISE_WRITESELECT_UB_PASS = "TbeEltwiseWriteSelectFusionPass";
static const std::string ELTWISE_QUANT_UB_PASS = "TbeEltwiseQuantFusionPass";
static const std::string COMMON_RULES0_UB_PASS = "TbeCommonRules0FusionPass";
static const std::string COMMON_RULES2_UB_PASS = "TbeCommonRules2FusionPass";
}  // namespace fe
#endif  // FUSION_ENGINE_OPTIMIZER_GRAPH_OPTIMIZER_FUSION_COMMON_FUSION_PASS_NAME_H_